home *** CD-ROM | disk | FTP | other *** search
- ; FILE: Source:modules/SoftSCSI.ASM REV: 20 --- Softkick SCSI ROM
-
- ;
- ; SoftSCSI -Module
- ; ~~~~~~~~~~~~~~~~
- ; This module will replace the SCSI (ep)rom (27C256) found from BLIZZARD
- ; turbo boards via software. Should work with 1230-IV, 1240-T/ERC and 1260.
- ;
- ; +--------------+------------------------
- ; | 1230-IV |
- ; | 1240-T/ERC | A1234.ROM
- ; | 1260 |
- ; +--------------+------------------------
- ;
- ; The ROM file *must* be "DEVS:Modules/A1234.ROM".
- ; Note that this module requires lots of rom space (~20K), so you should
- ; use EXTRESBUF feature of BlizKick.
- ;
- ; Beta ROM file can be obtained from phase5's ftp server ftp.phase5.de,
- ; directory /pub/phase5/BETA/SCSI/.
- ;
- ; This module does the same thing as SoftSCSI
- ; (Aminet: util/boot/SoftSCSI.lha) by Gideon Zenz.
- ;
- ; Written by Harry Sintonen.
- ; This source code is Public Domain.
- ;
-
- incdir "include:" ; Some required...
- include "exec/types.i"
- include "exec/libraries.i"
- include "libraries/configvars.i"
- include "blizkickmodule.i"
-
- _LVOOpenLibrary EQU -$228
- _LVOCloseLibrary EQU -$19E
-
- _LVOOpen EQU -$1E
- _LVOClose EQU -$24
- _LVORead EQU -$2A
-
- _LVOFindConfigDev EQU -$48
-
- MODE_OLDFILE EQU 1005
- OFFSET_BEGINNING EQU -1
- OFFSET_CURRENT EQU 0
- OFFSET_END EQU 1
-
- call MACRO
- jsr (_LVO\1,a6)
- ENDM
-
-
- BLIZPROD EQU $2140
- XROM_BUFSIZE EQU 32768
-
-
- SECTION PATCH,CODE
- _DUMMY_LABEL
- BK_PTC
-
- ; Code is run with following incoming parameters:
- ;
- ; a0=ptr to ROM start (buffer) eg. $1DE087B8
- ; a1=ptr to ROM start (ROM) eg. $00F80000 (do *not* access!)
- ; d0=ROM lenght in bytes eg. $00080000
- ; a2=ptr to _FindResident routine (will search ROM buffer for resident tag):
- ; CALL: jsr (a2)
- ; IN: a0=ptr to ROM, d0=rom len, a1=ptr to resident name
- ; OUT: d0=ptr to resident (buf) or NULL
- ; a3=ptr to _InstallModule routine (can be used to plant a "module"):
- ; CALL: jsr (a3)
- ; IN: a0=ptr to ROM, d0=rom len, a1=ptr to module, d6=dosbase
- ; OUT: d0=success
- ; a4=ptr to _Printf routine (will dump some silly things (errormsg?) to stdout ;-)
- ; CALL: jsr (a4)
- ; IN: a0=FmtString, a1=Array (may be 0), d6=dosbase
- ; OUT: -
- ; d6=dosbase, a6=execbase
- ;
- ; Code should return:
- ;
- ; d0=true if succeeded, false if failed.
- ; d1-d7/a0-a6 can be trashed. a7 *must* be preserved! ;-)
-
-
- ; NOTE: Kickstart *is* 2.0+
-
- cmp.w #37,($C,a0) ; Requires KS ROM V2.04+
- bhs.b .go
- moveq #0,d0
- rts
-
- .go movem.l d0/a0-a1,-(sp)
- moveq #0,d7
-
- lea (_sscsi_name,pc),a1 ; _FindResident
- jsr (a2)
- tst.l d0
- bne .xit ; Already installed!
-
- lea (_ExpName,pc),a1
- moveq #37,d0
- call OpenLibrary
- move.l d0,d5
- beq .xit
-
- sub.l a0,a0 ; BUG: was missing!
- move.l #BLIZPROD,d0 ; Requires 1230-IV, 1240 or 1260!
- moveq #$11,d1
- exg d5,a6
- call FindConfigDev
- exg d5,a6
- move.l d0,d2
- move.l d5,a1
- call CloseLibrary
- tst.l d2
- beq .berr ; Need board!
-
- exg d6,a6
- lea (_1200name,pc),a0
- move.l a0,d1
- move.l #MODE_OLDFILE,d2
- call Open
- move.l d0,d5
- beq.b .exitd ; No file!
-
- lea (_ROMImage,pc),a5
- move.l d5,d1
- move.l a5,d2
- moveq #4,d3
- call Read
- cmp.l d0,d3
- bne.b .readerr ; bad romfile!
- cmp.l #'XROM',(a5)
- bne.b .readerr ; bad romfile!
-
- move.l d5,d1
- move.l #XROM_BUFSIZE,d3 ; Read it!
- call Read
- tst.l d0
- bmi.b .readerr ; bad romfile!
- add.l d0,_softscsi_module+bkm_ResTag+RT_ENDSKIP ; magic... :)
-
- movem.l (sp),d0/a0
- lea (_softscsi_module,pc),a1
- exg d6,a6 ; d6=dosbase !!
- jsr (a3) ; _InstallModule
- exg d6,a6
- tst.l d0
- beq.b .installerr ; Failed!
-
- moveq #1,d7 ; All ok!
-
- .readerr move.l d5,d1
- call Close
-
- .exitd exg d6,a6
- .exit move.l d7,d0 ; Valid counter?
- bne.b .xit
- lea (_error1,pc),a0 ; a0=fmt
- .fail pea (_1200name,pc)
- pea (_header,pc)
- move.l sp,a1 ; a1=array
- jsr (a4) ; Call _Printf
- addq.l #8,sp
- moveq #0,d0 ; Return fail
- .xit lea (3*4,sp),sp
- rts
-
- .berr lea (_error2,pc),a0
- bra.b .fail
-
-
- .installerr move.l d5,d1
- call Close
- exg d6,a6
- lea (_error3,pc),a0 ; a0=fmt
- bra.b .fail
-
-
- _1200name dc.b 'DEVS:Modules/A1234.ROM',0
-
- _header dc.b 'SoftSCSI: ',0
- _error1 dc.b '%sCouldn''t load "%s"!',10,0
- _error2 dc.b '%sRequires BLIZZARD 1230-IV, 1240-T/ERC or 1260 turbo board.',10,0
- _error3 dc.b '%sCouldn''t plant module! (increase EXTRESBUF)',10,0
-
- CNOP 0,4
- _softscsi_module
- BK_MOD BKMF_SingleMode,_patch_end,(RTF_COLDSTART)<<24!37<<16!NT_UNKNOWN<<8!104,_sscsi_name,_sscsi_name,.SoftSCSI
-
- ; IN: d0=0, a0=0?, a6=execbase
- .SoftSCSI movem.l d0-a6,-(sp)
- lea (_ExpName,pc),a1
- moveq #37,d0
- call OpenLibrary
- move.l d0,d6
- beq.b .exit
-
- sub.l a0,a0
- move.l #$2140,d0
- moveq #$11,d1
- exg d6,a6
- call FindConfigDev
- exg d6,a6
- tst.l d0
- beq.b .close
-
- move.l d0,a0
- move.l (cd_Rom+er_Reserved0c,a0),a0 ; a0=DiagArea
- lea (14,a0),a1
- move.l (26,a1),a0
- move.l (30,a1),a3
- lea (34,a1),a4 ; a6=execbase
- movem.l d6/a6,-(sp)
- bsr.b _Code
- movem.l (sp)+,d6/a6
-
- .close move.l d6,a1
- call CloseLibrary
-
- .exit movem.l (sp)+,d0-a6
- rts
-
- _ExpName dc.b 'expansion.library',0
- _sscsi_name dc.b 'SoftSCSI',0
- CNOP 0,8
- _ROMImage
- _Code
- _patch_end ; MUST be here!
- ds.b XROM_BUFSIZE
-
-
- SECTION VERSION,DATA
-
- dc.b '$VER: SoftSCSI_MODULE 1.2 (10.3.97)',0
-